"""
1、函数内部可以访问函数外部可变、不可变类型的变量
2、若要修改外部不可变变量时，需要使用global关键字声明
3、函数内部可以直接修改外部可变类型变量
4、内部函数可以访问外部函数变量
5、内部函数若要修改外部函数不可变类型变量时，需要使用nonlocal关键字声明
6、内部函数可直接修改外部函数可变类型变量
7、变量作用域：LEGB
"""
c = 10
ls = [4,5,6]
def func():
    # 修改外部不可变变量时需要用global进行声明
    global c
    c += 20
    a = 10
    b = 20
    a += 10
    # 直接可以修改外部可变序列
    ls.append(88)
    print(locals())
    return a + b + c + ls[-1]

res = func()
print('res------>',res)

# 函数嵌套
d = 'hello word'
dt = {'a':1,'b':2}
def outer(x,y):
    e = '123'
    def inner(z):
        global d
        nonlocal e
        d += '001'
        print('修改后的d',d)
        e += '001'
        print('修改后的e',e)
        dt['c'] = 3
        result = x + y + dt['c'] + z
        return result 
    return inner

f = outer(11,12)
res2 = f(4)
print('res2------>',res2)